home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Light ROM 1
/
LIGHT-ROM 1 (Amiga Library Services)(1994).iso
/
ffdisks
/
d882.lha
/
GALer
/
GALer_english
/
Source
/
GALerSrcE.lha
/
GALer.c
< prev
next >
Wrap
C/C++ Source or Header
|
1993-03-28
|
25KB
|
884 lines
/****************************************************************/
/* */
/* GAL-Software */
/* */
/* Soft- and Hardware is copyright (c) 1991 */
/* by Christian Habermann */
/* Asamstr. 17 */
/* W-8050 Freising (Germany) */
/* */
/* This is Version 1.4 of GALer. */
/* */
/* History: */
/* V1.0: Testversion */
/* V1.1: Intuition environment added */
/* V1.2: some errors fixed */
/* V1.3: some errors fixed */
/* V1.4: new environment and support of A and B-GALs */
/* */
/* Compiler: Aztec 3.6a */
/* */
/* compilieren: cc GALer.c */
/* cc sub.c */
/* cc jedec.c */
/* cc pruefer.c */
/* cc GAL.c */
/* cc GALasm.c */
/* cc Reasm.c */
/* cc Optimizer.c */
/* as -n -c -d port.asm */
/* as -n -c -d reqglue.asm */
/* linken : ln GALer.o Sub.o Port.o Jedec.o Pruefer.o GAL.o */
/* GAL2.o GALasm.o Reasm.o Optimizer.o */
/* reqglue.o -lc */
/* */
/* Sorry for the German comments - but I was too lazzy to */
/* translate them. */
/* Source of GAL2.c is not included! */
/****************************************************************/
#include <devices/parallel.h>
#include <exec/io.h>
#include <exec/memory.h>
#include <exec/ports.h>
#include <exec/types.h>
#include <graphics/gfxbase.h>
#include <graphics/text.h>
#include <intuition/intuition.h>
#include <libraries/dosextens.h>
#include <functions.h>
#include "GALer.h"
#include "reqbase.h"
#define Menu_1 0
#define Menu_2 1
#define Menu_3 2
#define Menu_4 3
#define Menu_5 4
#define Menu_6 5
#define Item_1 0
#define Item_2 1
#define Item_3 2
#define Item_4 3
#define Item_5 4
#define Item_6 5
#define Item_7 6
#define Item_8 7
#define Item_9 8
extern struct ReqFileRequester MyFileReqStruct;
struct IORequest *CreateExtIO();
struct IntuitionBase *IntuitionBase;
struct ReqLib *ReqBase;
struct GfxBase *GfxBase;
struct IntuiMessage *message;
struct Screen *screen;
struct Window *window,*old_ReqWin;
struct MsgPort *timeport, *parport;
struct timerequest *timereq;
struct IOExtPar *parreq;
struct TextFont *txtfont;
struct TextAttr txtattr;
UWORD MyColors[4]={0xAAA,0x000,0xFFF,0x688};
SHORT vector3a[] = { 0,255,639,255,639,205 };
SHORT vector3b[] = { 0,255,0,205,639,205 };
SHORT vector2a[] = { 30,195,610,195,610,160 };
SHORT vector2b[] = { 30,195,30,160,610,160 };
SHORT vector1a[] = { 0,199,639,199,639,11 };
SHORT vector1b[] = { 0,199,0,11,639,11 };
struct Border border3b = { 0,0,2,3,JAM1,3,(SHORT *)vector3b,NULL };
struct Border border3a = { 0,0,1,3,JAM1,3,(SHORT *)vector3a,&border3b };
struct Border border2b = { 0,0,2,3,JAM1,3,(SHORT *)vector2b,&border3a };
struct Border border2a = { 0,0,1,3,JAM1,3,(SHORT *)vector2a,&border2b };
struct Border border1b = { 0,0,2,3,JAM1,3,(SHORT *)vector1b,&border2a };
struct Border border1a = { 0,0,1,3,JAM1,3,(SHORT *)vector1a,&border1b };
UBYTE title[] = "GALer V1.4 (c) 1993 by Christian Habermann GAL16V8 ";
struct IntuiText MIText1a = {0,1,JAM1,0,1,NULL,
(UBYTE *)"Show pinnames",NULL};
struct IntuiText MIText1b = {0,1,JAM1,0,1,NULL,
(UBYTE *)"Clear pinnames",NULL};
struct IntuiText MIText1d = {0,1,JAM1,0,1,NULL,
(UBYTE *)"Optimizer",NULL};
struct IntuiText MIText1c = {0,1,JAM1,0,1,NULL,
(UBYTE *)"GAL-Checker",NULL};
struct IntuiText MIText3c = {0,1,JAM1,0,1,NULL,
(UBYTE *)"Reassembler",NULL};
struct IntuiText MIText3b = {0,1,JAM1,0,1,NULL,
(UBYTE *)"JEDEC-file parameter",NULL};
struct IntuiText MIText3 = {0,1,JAM1,0,1,NULL,
(UBYTE *)"Generate JEDEC-file",NULL};
struct IntuiText MIText3a = {0,1,JAM1,0,1,NULL,
(UBYTE *)"GAL-Info",NULL};
struct IntuiText MIText4b = {0,1,JAM1,0,1,NULL,
(UBYTE *)"Read ACW",NULL};
struct IntuiText MIText4 = {0,1,JAM1,0,1,NULL,
(UBYTE *)"Read signature",NULL};
struct IntuiText MIText5 = {0,1,JAM1,0,1,NULL,
(UBYTE *)"Assemble file",NULL};
struct IntuiText MIText8 = {0,1,JAM1,0,1,NULL,
(UBYTE *)"Set security bit",NULL};
struct IntuiText MIText8b = {0,1,JAM1,0,1,NULL,
(UBYTE *)"Write access",NULL};
struct IntuiText MIText8a = {0,1,JAM1,0,1,NULL,
(UBYTE *)"Test security bit",NULL};
struct IntuiText MIText9 = {0,1,JAM1,0,1,NULL,
(UBYTE *)"Blank test",NULL};
struct IntuiText MIText9a = {0,1,JAM1,0,1,NULL,
(UBYTE *)"Compare",NULL};
struct IntuiText MIText10 = {0,1,JAM1,0,1,NULL,
(UBYTE *)"Copy",NULL};
struct IntuiText MIText11 = {0,1,JAM1,0,1,NULL,
(UBYTE *)"Program",NULL};
struct IntuiText MIText12 = {0,1,JAM1,0,1,NULL,
(UBYTE *)"Erase",NULL};
struct IntuiText MIText21 = {0,1,JAM1,20,1,NULL,
(UBYTE *)"A-Type",NULL};
struct IntuiText MIText20a= {0,1,JAM1,20,1,NULL,
(UBYTE *)"Auto-A-Type",NULL};
struct IntuiText MIText20 = {0,1,JAM1,20,1,NULL,
(UBYTE *)"Type-Requester",NULL};
struct IntuiText MIText13 = {0,1,JAM1,20,1,NULL,
(UBYTE *)"GAL20V8",NULL};
struct IntuiText MIText14 = {0,1,JAM1,20,1,NULL,
(UBYTE *)"GAL16V8",NULL};
struct IntuiText MIText17 = {0,1,JAM1,0,1,NULL,
(UBYTE *)"Quit",NULL};
struct IntuiText MIText16 = {0,1,JAM1,0,1,NULL,
(UBYTE *)"Save config.",NULL};
struct IntuiText MIText15 = {0,1,JAM1,0,1,NULL,
(UBYTE *)"About GALer",NULL};
struct IntuiText MITextP = {0,1,JAM1,0,1,NULL,
(UBYTE *)"Exit Checker",NULL};
struct MenuItem MenuItem1d= {NULL,0,35,180,10,
ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP,
0,(APTR)&MIText1d,NULL,'o',NULL,MENUNULL};
struct MenuItem MenuItem1c= {&MenuItem1d,0,20,180,10,
ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP,
0,(APTR)&MIText1c,NULL,'m',NULL,MENUNULL};
struct MenuItem MenuItem1b= {&MenuItem1c,0,10,180,10,
ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP,
0,(APTR)&MIText1b,NULL,'c',NULL,MENUNULL};
struct MenuItem MenuItem1a= {&MenuItem1b,0,0,180,10,
ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP,
0,(APTR)&MIText1a,NULL,'n',NULL,MENUNULL};
struct MenuItem MenuItem3c= {NULL,0,60,224,10,
ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP,
0,(APTR)&MIText3c,NULL,'i',NULL,MENUNULL};
struct MenuItem MenuItem3b= {&MenuItem3c,0,45,224,10,
ITEMTEXT+ITEMENABLED+HIGHCOMP,
0,(APTR)&MIText3b,NULL,0,NULL,MENUNULL};
struct MenuItem MenuItem3 = {&MenuItem3b,0,35,224,10,
ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP,
0,(APTR)&MIText3,NULL,'j',NULL,MENUNULL};
struct MenuItem MenuItem3a= {&MenuItem3,0,20,224,10,
ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP,
0,(APTR)&MIText3a,NULL,'e',NULL,MENUNULL};
struct MenuItem MenuItem2b= {&MenuItem3a,0,10,224,10,
ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP,
0,(APTR)&MIText4b,NULL,'w',NULL,MENUNULL};
struct MenuItem MenuItem2 = {&MenuItem2b,0,0,224,10,
ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP,
0,(APTR)&MIText4,NULL,'r',NULL,MENUNULL};
struct MenuItem MenuItem7 = {NULL,0,0,200,10,
ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP,
0,(APTR)&MIText5,NULL,'a',NULL,MENUNULL};
struct MenuItem MenuItem12b= {NULL,0,75,182,10,
ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP,
0,(APTR)&MIText8b,NULL,'d',NULL,MENUNULL};
struct MenuItem MenuItem12a= {&MenuItem12b,0,60,182,10,
ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP,
0,(APTR)&MIText8a,NULL,'v',NULL,MENUNULL};
struct MenuItem MenuItem12 = {&MenuItem12a,0,50,182,10,
ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP,
0,(APTR)&MIText8,NULL,'s',NULL,MENUNULL};
struct MenuItem MenuItem11 = {&MenuItem12,0,40,182,10,
ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP,
0,(APTR)&MIText9,NULL,'t',NULL,MENUNULL};
struct MenuItem MenuItem9c = {&MenuItem11,0,30,182,10,
ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP,
0,(APTR)&MIText9a,NULL,'b',NULL,MENUNULL};
struct MenuItem MenuItem8 = {&MenuItem9c,0,20,182,10,
ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP,
0,(APTR)&MIText12,NULL,'l',NULL,MENUNULL};
struct MenuItem MenuItem10 = {&MenuItem8,0,10,182,10,
ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP,
0,(APTR)&MIText10,NULL,'k',NULL,MENUNULL};
struct MenuItem MenuItem9 = {&MenuItem10,0,0,182,10,
ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP,
0,(APTR)&MIText11,NULL,'p',NULL,MENUNULL};
struct MenuItem MenuItem14 = {NULL,0,45,138,10,
MENUTOGGLE+CHECKIT+ITEMTEXT+ITEMENABLED+HIGHCOMP,
0,(APTR)&MIText20,NULL,0,NULL,MENUNULL};
struct MenuItem MenuItem14a= {&MenuItem14,0,35,138,10,
MENUTOGGLE+CHECKIT+ITEMTEXT+ITEMENABLED+HIGHCOMP,
0,(APTR)&MIText20a,NULL,0,NULL,MENUNULL};
struct MenuItem MenuItem14b= {&MenuItem14a,0,20,138,10,
MENUTOGGLE+CHECKIT+ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP,
0,(APTR)&MIText21,NULL,'3',NULL,MENUNULL};
struct MenuItem MenuItem13b= {&MenuItem14b,0,10,138,10,
CHECKIT+ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP,
0xFFE1,(APTR)&MIText13,NULL,'2',NULL,MENUNULL};
struct MenuItem MenuItem13 = {&MenuItem13b,0,0,138,10,
CHECKIT+ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP,
0xFFE2,(APTR)&MIText14,NULL,'1',NULL,MENUNULL};
struct MenuItem MenuItem17 = {NULL,0,25,172,10,
ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP,
0,(APTR)&MIText17,NULL,'q',NULL,MENUNULL};
struct MenuItem MenuItem16 = {&MenuItem17,0,10,172,10,
ITEMTEXT+ITEMENABLED+HIGHCOMP,
0,(APTR)&MIText16,NULL,0,NULL,MENUNULL};
struct MenuItem MenuItem15 = {&MenuItem16,0,0,172,10,
ITEMTEXT+ITEMENABLED+HIGHCOMP,
0,(APTR)&MIText15,NULL,0,NULL,MENUNULL};
struct Menu Menu6 = {NULL,446,0,87,0,MENUENABLED,
"Tools",&MenuItem1a};
struct Menu Menu5 = {&Menu6,304,0,135,0,MENUENABLED,
"GAL-Disassembler",&MenuItem2};
struct Menu Menu4 = {&Menu5,186,0,111,0,MENUENABLED,
"GAL-Assembler",&MenuItem7};
struct Menu Menu3 = {&Menu4,148,0,31,0,MENUENABLED,
"GAL",&MenuItem9};
struct Menu Menu2 = {&Menu3,70,0,71,0,MENUENABLED,
"GAL-Type",&MenuItem13};
struct Menu Menu1 = {&Menu2,0,0,63,0,MENUENABLED,
"Project",&MenuItem15};
struct MenuItem MenuItemP = {NULL,0,0,175,10,
ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP,
0,(APTR)&MITextP,NULL,'x',NULL,MENUNULL};
struct Menu MenuP = {NULL,0,0,95,0,MENUENABLED,
"GAL-Checker",&MenuItemP};
SHORT BorderVectors1[] = {0,0,17,0,17,9,0,9,0,0};
struct Border Border1 = {-1,-1,2,3,JAM1,5,BorderVectors1,NULL};
struct Border Border2 = {-1,-1,3,3,JAM1,5,BorderVectors1,NULL};
struct IntuiText IText35 = {2,0,JAM2,4,0,NULL,(UBYTE *)"L",NULL};
struct IntuiText IText34 = {2,0,JAM2,4,0,NULL,(UBYTE *)"O",NULL};
struct IntuiText IText33 = {2,0,JAM2,4,0,NULL,(UBYTE *)"L",NULL};
struct IntuiText IText32 = {2,0,JAM2,4,0,NULL,(UBYTE *)"O",NULL};
struct IntuiText IText31 = {2,0,JAM2,4,0,NULL,(UBYTE *)"L",NULL};
struct IntuiText IText30 = {2,0,JAM2,4,0,NULL,(UBYTE *)"O",NULL};
struct IntuiText IText29 = {2,0,JAM2,4,0,NULL,(UBYTE *)"L",NULL};
struct IntuiText IText28 = {2,0,JAM2,4,0,NULL,(UBYTE *)"O",NULL};
struct IntuiText IText27 = {2,0,JAM2,4,0,NULL,(UBYTE *)"L",NULL};
struct IntuiText IText26 = {2,0,JAM2,4,0,NULL,(UBYTE *)"O",NULL};
struct IntuiText IText25 = {2,0,JAM2,4,0,NULL,(UBYTE *)"L",NULL};
struct IntuiText IText24 = {2,0,JAM2,4,0,NULL,(UBYTE *)"O",NULL};
struct IntuiText IText23 = {2,0,JAM2,4,0,NULL,(UBYTE *)"L",NULL};
struct IntuiText IText22 = {2,0,JAM2,4,0,NULL,(UBYTE *)"O",NULL};
struct IntuiText IText21 = {2,0,JAM2,4,0,NULL,(UBYTE *)"L",NULL};
struct IntuiText IText20 = {2,0,JAM2,4,0,NULL,(UBYTE *)"O",NULL};
struct IntuiText IText13 = {2,0,JAM2,4,0,NULL,(UBYTE *)"L",NULL};
struct IntuiText IText12 = {2,0,JAM2,4,0,NULL,(UBYTE *)"L",NULL};
struct IntuiText IText11 = {2,0,JAM2,4,0,NULL,(UBYTE *)"L",NULL};
struct IntuiText IText10 = {2,0,JAM2,4,0,NULL,(UBYTE *)"L",NULL};
struct IntuiText IText9 = {2,0,JAM2,4,0,NULL,(UBYTE *)"L",NULL};
struct IntuiText IText8 = {2,0,JAM2,4,0,NULL,(UBYTE *)"L",NULL};
struct IntuiText IText7 = {2,0,JAM2,4,0,NULL,(UBYTE *)"L",NULL};
struct IntuiText IText6 = {2,0,JAM2,4,0,NULL,(UBYTE *)"L",NULL};
struct IntuiText IText5 = {2,0,JAM2,4,0,NULL,(UBYTE *)"L",NULL};
struct IntuiText IText4 = {2,0,JAM2,4,0,NULL,(UBYTE *)"L",NULL};
struct IntuiText IText1c = {2,0,JAM2,4,0,NULL,(UBYTE *)"L",NULL};
struct IntuiText IText3 = {2,0,JAM2,4,0,NULL,(UBYTE *)"L",NULL};
struct IntuiText IText2 = {2,0,JAM2,4,0,NULL,(UBYTE *)"L",NULL};
struct IntuiText IText1 = {2,0,JAM2,4,0,NULL,(UBYTE *)"L",NULL};
struct Gadget Gadget35= {NULL,382,120,16,8,NULL,
GADGIMMEDIATE+RELVERIFY,BOOLGADGET,
(APTR)&Border2,NULL,&IText35,NULL,NULL,15,NULL};
struct Gadget Gadget34= {&Gadget35,340,120,16,8,NULL,
GADGIMMEDIATE+RELVERIFY,BOOLGADGET,
(APTR)&Border1,NULL,&IText34,NULL,NULL,30,NULL};
struct Gadget Gadget33= {&Gadget34,382,110,16,8,NULL,
GADGIMMEDIATE+RELVERIFY,BOOLGADGET,
(APTR)&Border2,NULL,&IText33,NULL,NULL,16,NULL};
struct Gadget Gadget32= {&Gadget33,340,110,16,8,NULL,
GADGIMMEDIATE+RELVERIFY,BOOLGADGET,
(APTR)&Border1,NULL,&IText32,NULL,NULL,31,NULL};
struct Gadget Gadget31= {&Gadget32,382,100,16,8,NULL,
GADGIMMEDIATE+RELVERIFY,BOOLGADGET,
(APTR)&Border2,NULL,&IText31,NULL,NULL,17,NULL};
struct Gadget Gadget30= {&Gadget31,340,100,16,8,NULL,
GADGIMMEDIATE+RELVERIFY,BOOLGADGET,
(APTR)&Border1,NULL,&IText30,NULL,NULL,32,NULL};
struct Gadget Gadget29= {&Gadget30,382,90,16,8,NULL,
GADGIMMEDIATE+RELVERIFY,BOOLGADGET,
(APTR)&Border2,NULL,&IText29,NULL,NULL,18,NULL};
struct Gadget Gadget28= {&Gadget29,340,90,16,8,NULL,
GADGIMMEDIATE+RELVERIFY,BOOLGADGET,
(APTR)&Border1,NULL,&IText28,NULL,NULL,33,NULL};
struct Gadget Gadget27= {&Gadget28,382,80,16,8,NULL,
GADGIMMEDIATE+RELVERIFY,BOOLGADGET,
(APTR)&Border2,NULL,&IText27,NULL,NULL,19,NULL};
struct Gadget Gadget26= {&Gadget27,340,80,16,8,NULL,
GADGIMMEDIATE+RELVERIFY,BOOLGADGET,
(APTR)&Border1,NULL,&IText26,NULL,NULL,34,NULL};
struct Gadget Gadget25= {&Gadget26,382,70,16,8,NULL,
GADGIMMEDIATE+RELVERIFY,BOOLGADGET,
(APTR)&Border2,NULL,&IText25,NULL,NULL,20,NULL};
struct Gadget Gadget24= {&Gadget25,340,70,16,8,NULL,
GADGIMMEDIATE+RELVERIFY,BOOLGADGET,
(APTR)&Border1,NULL,&IText24,NULL,NULL,35,NULL};
struct Gadget Gadget23= {&Gadget24,382,60,16,8,NULL,
GADGIMMEDIATE+RELVERIFY,BOOLGADGET,
(APTR)&Border2,NULL,&IText23,NULL,NULL,21,NULL};
struct Gadget Gadget22= {&Gadget23,340,60,16,8,NULL,
GADGIMMEDIATE+RELVERIFY,BOOLGADGET,
(APTR)&Border1,NULL,&IText22,NULL,NULL,36,NULL};
struct Gadget Gadget21= {&Gadget22,382,50,16,8,NULL,
GADGIMMEDIATE+RELVERIFY,BOOLGADGET,
(APTR)&Border2,NULL,&IText21,NULL,NULL,22,NULL};
struct Gadget Gadget20= {&Gadget21,340,50,16,8,NULL,
GADGIMMEDIATE+RELVERIFY,BOOLGADGET,
(APTR)&Border1,NULL,&IText20,NULL,NULL,37,NULL};
struct Gadget Gadget13= {&Gadget20,382,130,16,8,NULL,
GADGIMMEDIATE+RELVERIFY,BOOLGADGET,
(APTR)&Border1,NULL,&IText13,NULL,NULL,10,NULL};
struct Gadget Gadget12= {&Gadget13,242,120,16,8,NULL,
GADGIMMEDIATE+RELVERIFY,BOOLGADGET,
(APTR)&Border1,NULL,&IText12,NULL,NULL,9,NULL};
struct Gadget Gadget11= {&Gadget12,242,110,16,8,NULL,
GADGIMMEDIATE+RELVERIFY,BOOLGADGET,
(APTR)&Border1,NULL,&IText11,NULL,NULL,8,NULL};
struct Gadget Gadget10= {&Gadget11,242,100,16,8,NULL,
GADGIMMEDIATE+RELVERIFY,BOOLGADGET,
(APTR)&Border1,NULL,&IText10,NULL,NULL,7,NULL};
struct Gadget Gadget9 = {&Gadget10,242,90,16,8,NULL,
GADGIMMEDIATE+RELVERIFY,BOOLGADGET,
(APTR)&Border1,NULL,&IText9,NULL,NULL,6,NULL};
struct Gadget Gadget8 = {&Gadget9,242,80,16,8,NULL,
GADGIMMEDIATE+RELVERIFY,BOOLGADGET,
(APTR)&Border1,NULL,&IText8,NULL,NULL,5,NULL};
struct Gadget Gadget7 = {&Gadget8,242,70,16,8,NULL,
GADGIMMEDIATE+RELVERIFY,BOOLGADGET,
(APTR)&Border1,NULL,&IText7,NULL,NULL,4,NULL};
struct Gadget Gadget6 = {&Gadget7,242,60,16,8,NULL,
GADGIMMEDIATE+RELVERIFY,BOOLGADGET,
(APTR)&Border1,NULL,&IText6,NULL,NULL,3,NULL};
struct Gadget Gadget5 = {&Gadget6,242,50,16,8,NULL,
GADGIMMEDIATE+RELVERIFY,BOOLGADGET,
(APTR)&Border1,NULL,&IText5,NULL,NULL,2,NULL};
struct Gadget Gadget4 = {&Gadget5,242,40,16,8,NULL,
GADGIMMEDIATE+RELVERIFY,BOOLGADGET,
(APTR)&Border1,NULL,&IText4,NULL,NULL,1,NULL};
struct Gadget Gadget1c= {NULL,382,120,16,8,NULL,
GADGIMMEDIATE+RELVERIFY,BOOLGADGET,
(APTR)&Border1,NULL,&IText1c,NULL,NULL,14,NULL};
struct Gadget Gadget3 = {&Gadget1c,242,30,16,8,NULL,
GADGIMMEDIATE+RELVERIFY,BOOLGADGET,
(APTR)&Border1,NULL,&IText3,NULL,NULL,13,NULL};
struct Gadget Gadget2 = {&Gadget3,382,30,16,8,NULL,
GADGIMMEDIATE+RELVERIFY,BOOLGADGET,
(APTR)&Border1,NULL,&IText2,NULL,NULL,12,NULL};
struct Gadget Gadget1 = {&Gadget2,242,20,16,8,NULL,
GADGIMMEDIATE+RELVERIFY,BOOLGADGET,
(APTR)&Border1,NULL,&IText1,NULL,NULL,11,NULL};
struct NewScreen MyScreen={ 0,0,640,256,2,2,3,HIRES,CUSTOMSCREEN,&txtattr,
(UBYTE *)title,
NULL,NULL} ;
struct NewWindow MyWindow={ 0,11,640,245,1,2,
GADGETUP|MENUPICK|VANILLAKEY,
ACTIVATE|BORDERLESS,
NULL,NULL,NULL,NULL,NULL,0,0,0,0,CUSTOMSCREEN };
struct Process *myproc;
struct RastPort *rp;
struct ViewPort *vp;
int pruef_mode = 0;
extern int GALType, MaxFuseAdr, SigAdr;
extern struct Configuration Config;
main()
{
ULONG class;
USHORT code, gadID;
struct Gadget *gad;
OpenStuff(); /*Libs, Windows... öffnen*/
rp = &(screen->RastPort);
vp = &screen->ViewPort;
LoadRGB4(vp,&MyColors,4L);
DrawBorder(rp,&border1a,0L,0L); /*Umrandungen,... zeichnen*/
if (GetParPort()) { /*Druckerport frei?*/
puts("parallel port is not free!");
CloseStuff();
exit(0);
}
if (GetTimer()) { /*Timer holen*/
FreeParPort();
puts("can't find timer!");
CloseStuff;
exit(0);
}
InitGALer(); /*Ausgänge von IC3,4,5 auf*/
EnableOutput(); /*LOW schalten*/
LoadConfig(); /* Voreinstellung laden */
for (;;) {
Wait(1L<<window->UserPort->mp_SigBit);
if (message=(struct IntuiMessage *)GetMsg(window->UserPort)) {
class = message->Class;
code = message->Code;
if (class == GADGETUP) {
gad = (struct Gadget *)message->IAddress;
gadID = gad->GadgetID; }
ReplyMsg(message);
switch(class) {
case MENUPICK: if (MENUNUM(code) != MENUNULL)
ExecuteMenu(MENUNUM(code),ITEMNUM(code));
break;
case GADGETUP: if ((gadID < 100) && (pruef_mode == ON))
Pruefer(gad,gadID);
break;
}
}
}
} /*end of main*/
/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
/* Subroutinen */
/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
/*aufgerufenes Menü ausführen*/
void ExecuteMenu(menu,item)
int menu,item;
{
if (pruef_mode==ON) {
if ((menu == Menu_1) && (item == Item_1)) TogglePruefer();
}
else {
switch (menu) {
case Menu_1: /*Projekt*/
switch (item) {
case Item_1:
About();
break;
case Item_2:
SaveConfig();
break;
case Item_3:
CloseStuff();
FreeTimer();
FreeParPort();
exit(0);
break;
}
break;
case Menu_2: /*GAL-Typ*/
switch (item) {
case Item_1:
SetGALType(GAL16V8,Config.AType);
break;
case Item_2:
SetGALType(GAL20V8,Config.AType);
break;
case Item_3:
SetGALType(GALType,!Config.AType);
break;
case Item_4:
Config.AutoAType = !Config.AutoAType;
if (Config.AutoAType)
MenuItem14b.Flags &= ~ITEMENABLED; /*A-Typ-Menü*/
else
MenuItem14b.Flags |= ITEMENABLED; /*A-Typ-Menü*/
break;
case Item_5:
Config.GALTypeReq = !Config.GALTypeReq;
break;
}
break;
case Menu_3: /*GAL*/
switch (item) {
case Item_1:
ProgramGAL(); /*programmieren*/
break;
case Item_2: /*kopieren*/
CopyGAL();
break;
case Item_3: /*löschen*/
Loeschen();
break;
case Item_4: /*vergleichen*/
Compare();
break;
case Item_5: /*Leertest*/
Leertest();
break;
case Item_6: /*setze Sec.*/
SetSecurity(YES);
break;
case Item_7:
TestSecurity(); /*teste Sec.*/
break;
case Item_8:
Schreibverhalten();
break;
}
break;
case Menu_4: /*GAL-Assembler*/
if (item == Item_1) {
AssembleInputFile(ASSEMBLER); /*Eingabe-Datei assemblieren*/
break;
}
break;
case Menu_5: /*GAL-Disassembler*/
switch (item) {
case Item_1:
PrintSignature();
break;
case Item_2:
PrintACW();
break;
case Item_3:
GALInfo();
break;
case Item_4:
PutJedec();
break;
case Item_5:
JedecRequester();
break;
case Item_6:
Reassembler();
break;
}
break;
case Menu_6: /*Tools*/
switch (item) {
case Item_1:
PrintPinNames();
break;
case Item_2:
ClearPinNames();
break;
case Item_3:
TogglePruefer();
break;
case Item_4:
Optimizer();
break;
}
}
}
}
/* PAL oder NTSC?
*/
void PAL_NTSC()
{
if (GfxBase->DisplayFlags & NTSC) { /*wenn NTSC, dann anpassen*/
MyScreen.Height = 200;
MyWindow.Height = 189;
border2b.NextBorder = NULL; /*unteren Kasten weglassen*/
}
}
int GetParPort() /*Druckerport belegen*/
{
parport = CreatePort(0L,0L);
if (parport == NULL)
return(-1);
parreq = (struct IOExtPar *) CreateExtIO(parport,(long)sizeof(struct IOExtPar));
if (parreq == NULL) {
DeletePort(parport);
return(-1);
}
if (OpenDevice((UBYTE *)"parallel.device",0L,parreq,0L)) {
DeleteExtIO(parreq,(long)sizeof(struct IOExtPar));
DeletePort(parport);
return(-1);
}
InitParPort(); /*Datenrichtungsregister der CIAs*/
/*initialisieren*/
return(0);
}
void FreeParPort() /*Druckerport wieder freigeben*/
{
RestoreParPort(); /*Datenrichtungsregister der CIAs restau-*/
/*rieren, nicht aber den Zustand der Aus-*/
/*gänge, da sonst der angeschlossene Brenner*/
/*einen ungewollten Befehl erhalten könnte*/
/*(Vcc on, VEdit on,...).*/
CloseDevice(parreq); /* Port wieder freigeben */
DeleteExtIO(parreq,(long)sizeof(struct IOExtPar));
DeletePort(parport);
}
GetTimer() /*Timer holen*/
{
timeport = CreatePort(0L,0L);
if (timeport == NULL)
return(-1);
timereq=(struct timerequest *)AllocMem(
(long)sizeof(struct timerequest),MEMF_PUBLIC);
if (timereq == NULL) {
DeletePort(timeport);
return(-1);
}
timereq->tr_node.io_Message.mn_Node.ln_Type=NT_MESSAGE;
timereq->tr_node.io_Message.mn_Node.ln_Pri=0;
timereq->tr_node.io_Message.mn_ReplyPort=timeport;
if (OpenDevice(TIMERNAME,UNIT_MICROHZ,timereq,0L)) {
FreeMem(&timereq,(long)sizeof(struct timerequest));
DeletePort(timeport);
return(-1);
}
return(0);
}
void FreeTimer() /*Timer wieder freigeben*/
{
CloseDevice(timereq);
FreeMem(timereq,(long)sizeof(struct timerequest));
DeletePort(timeport);
}
/*micro: microsec. to wait
secs: seconds to wait
*/
void WaitForTimer(micro)
ULONG micro;
{
timereq->tr_node.io_Command=TR_ADDREQUEST;
timereq->tr_time.tv_secs=0;
timereq->tr_time.tv_micro=micro;
DoIO(timereq);
}
void OpenStuff()
{
if ((IntuitionBase=(struct IntuitionBase *)OpenLibrary("intuition.library",0L))==NULL) {
puts("can't open intuition.library!");
exit(0);
}
if((GfxBase=(struct GfxBase *)OpenLibrary("graphics.library",0L))==NULL) {
puts("can't open graphics.library!");
CloseStuff();
exit(0);
}
PAL_NTSC(); /*Fenstergröße usw. anpassen*/
if ((ReqBase=(struct ReqLib *)OpenLibrary("req.library",0L))==NULL) {
puts("can't open req.library!");
CloseStuff();
exit(0);
}
txtattr.ta_Name = (STRPTR)"topaz.font"; /*Font holen*/
txtattr.ta_YSize = 8;
txtattr.ta_Style = 0;
txtattr.ta_Flags = 0;
if (!(txtfont = (struct TextFont *)OpenFont(&txtattr))) {
puts("can't find topaz.font 8!");
CloseStuff();
exit(0);
}
if (!(screen=(struct Screen *)OpenScreen(&MyScreen))) {
puts("can't open screen!");
CloseStuff();
exit(0);
}
MyWindow.Screen=screen;
if ((window=(struct Window *)OpenWindow(&MyWindow))==NULL) {
puts("can't open window!");
CloseStuff();
exit(0);
}
SetMenuStrip(window,&Menu1);
myproc = (struct Process *)FindTask(0L); /*Requester umleiten*/
old_ReqWin = (struct Window *)myproc->pr_WindowPtr;
myproc->pr_WindowPtr = (APTR)window;
}
void CloseStuff()
{
if (ReqBase)
PurgeFiles(&MyFileReqStruct); /*Speicher für File-Req. freigeben*/
myproc->pr_WindowPtr=(APTR)old_ReqWin; /*Req. auf ursprüngliches Window*/
if (txtfont) CloseFont(txtfont);
if (window) {
ClearMenuStrip(window);
CloseWindow(window);
}
if (screen) CloseScreen(screen);
if (IntuitionBase) CloseLibrary (IntuitionBase);
if (GfxBase) CloseLibrary (GfxBase);
if (ReqBase) CloseLibrary (ReqBase);
}